package com.learn.step05_exceptions

/**
 *
 *
 * @author: hbliy
 * @date: 2025/7/11 14:28
 */
fun main() {

    var swordsJuggling: Int? = null;
    /**
     * 1..3：这是 Kotlin 里创建区间的写法，它代表的是从 1 到 3 的闭区间，也就是包含 1、2、3 这三个整数。
     * shuffled()：该函数会把区间里的元素随机打乱，进而得到一个新的列表。打个比方，可能生成 [2, 1, 3] 或者 [3, 2, 1] 等不同的随机排列。
     * last()：此函数的作用是获取打乱后列表的最后一个元素。由于列表元素的顺序是随机的，所以每次获取的最后一个元素也具有随机性。
     */
    val isJugglingProficient = (1..3).shuffled().last() == 3
    if (isJugglingProficient) {
        swordsJuggling = 2
    }

//    proficiencyCheck(swordsJuggling)
//    proficiencyCheck2(swordsJuggling)

    // try catch

    try {
        proficiencyCheck3(swordsJuggling)
    }catch (e: UnskilledSwordJugglerException) {
        println(e)
    }
    swordsJuggling = swordsJuggling!!.plus(1)

    println("You juggle $swordsJuggling swords!")
}

/**
 * 抛出一个IllegalStateException 异常
 */
fun proficiencyCheck(swordsJuggling: Int?) {
    // 对象 swordsJuggling 值为 null 时，那么它就会抛出异常
    swordsJuggling ?: throw IllegalStateException("Player cannot juggle swords")
}

/**
 * 抛出自定义异常
 */
fun proficiencyCheck2(swordsJuggling: Int?) {
    // 对象 swordsJuggling 值为 null 时，那么它就会抛出异常
    swordsJuggling ?: throw UnskilledSwordJugglerException()
}

/**
 * 使用先决条件函数
 */
fun proficiencyCheck3(swordsJuggling: Int?) {
    checkNotNull(swordsJuggling, { "Player cannot juggle swords" })
}

/**
 * 自定义异常类并继承 IllegalStateException
 */
class UnskilledSwordJugglerException() :
    IllegalStateException("Player cannot juggle swords")